// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

#ifndef LIBGO_INTERFACE_H
#define LIBGO_INTERFACE_H

extern void * __go_convert_interface (const struct __go_type_descriptor *,
	const struct __go_type_descriptor *);
extern void *__go_convert_interface_2 (const struct __go_type_descriptor *,
	const struct __go_type_descriptor *, _Bool);
extern _Bool __go_can_convert_to_interface(const struct __go_type_descriptor *,
	const struct __go_type_descriptor *);
extern int __go_empty_interface_compare (struct __go_empty_interface, struct __go_empty_interface);
extern int __go_empty_interface_value_compare (struct __go_empty_interface,
	const struct __go_type_descriptor *, const void *);
extern int __go_interface_compare (struct __go_interface, struct __go_interface);
extern int __go_interface_empty_compare (struct __go_interface, struct __go_empty_interface);
extern int __go_interface_value_compare (struct __go_interface,
	const struct __go_type_descriptor *, const void *val);

extern void __go_check_interface_type (
	const struct __go_type_descriptor *lhs_descriptor,
	const struct __go_type_descriptor *rhs_descriptor,
	const struct __go_type_descriptor *rhs_inter_descriptor);

extern const void * __go_assert_interface (const struct __go_type_descriptor *lhs_descriptor,
	const struct __go_type_descriptor *rhs_descriptor);

#endif /* !defined(LIBGO_INTERFACE_H) */
